package com.shark.uh.service.impl;

import com.shark.uh.service.RedisService;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

@Service
public class RedisServiceImpl implements RedisService {

    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 存入redis并设置时间（秒）
     *
     * @param key     键
     * @param value   值
     * @param timeout 过期时间
     */
    @Override
    public void saveToRedisSecond(String key, String value, long timeout) {
        redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
    }

    /**
     * 存入redis并设置时间（分钟）
     *
     * @param key     键
     * @param value   值
     * @param timeout 过期时间
     */
    @Override
    public void saveToRedisMinute(String key, String value, long timeout) {
        redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.MINUTES);
    }

    /**
     * 存入redis并设置时间（小时）
     *
     * @param key     键
     * @param value   值
     * @param timeout 过期时间
     */
    @Override
    public void saveToRedisHour(String key, String value, long timeout) {
        redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.HOURS);
    }

    /**
     * 存入redis并设置时间（天）
     *
     * @param key     键
     * @param value   值
     * @param timeout 过期时间
     */
    @Override
    public void saveToRedisDay(String key, String value, long timeout) {
        redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.DAYS);
    }

    /**
     * 存入redis并设置时间（周）
     *
     * @param key     键
     * @param value   值
     * @param timeout 过期时间
     */
    @Override
    public void saveToRedisWeek(String key, String value, long timeout) {
        timeout = timeout * 7;
        redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.DAYS);
    }

    /**
     * 存入redis并设置时间（月）
     *
     * @param key     键
     * @param value   值
     * @param timeout 过期时间
     */
    @Override
    public void saveToRedisMonth(String key, String value, long timeout) {
        timeout = timeout * 30;
        redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.DAYS);
    }

    /**
     * 存入redis并设置时间（年）
     *
     * @param key     键
     * @param value   值
     * @param timeout 过期时间
     */
    @Override
    public void saveToRedisYear(String key, String value, long timeout) {
        timeout = timeout * 365;
        redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.DAYS);
    }

    /**
     * 从redis中取值
     *
     * @param key 键
     */
    @Override
    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * 从redis中取值
     *
     * @param key 键
     */
    @Override
    public String getString(String key) {
        Object object = redisTemplate.opsForValue().get(key);
        if (object == null) {
            return null;
        }
        return object.toString();
    }

    /**
     * 从redis中删除值
     *
     * @param key 键
     */
    @Override
    public void del(String key) {
        redisTemplate.delete(key);
    }

}
